package br.com.appclassificados.controler;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import com.sun.org.apache.xpath.internal.operations.Number;

import br.com.appclassificados.model.Pessoa;
import br.com.appclassificados.dao.PessoaDao;


@ManagedBean(name="pessoaBean")
@SessionScoped
public class PessoaBean {
	
	// A T R I B U T O S
	
	private Pessoa 	pessoa;			// Classe utilizada no cadastro
	private String	novaData;		// String utilizada para conversao da Data
	
	
	// C O N S T R U T O R E S

	public PessoaBean(){
		super();
		this.pessoa = new Pessoa(0, "", "", "", new Date(), "");
	}
	
	// M E T O D O S
	
	public String salvar() throws ParseException{
		
		
		PessoaDao dao = new PessoaDao();
		
		Date nascimento = new SimpleDateFormat("dd/MM/yyyy").parse(this.novaData);
		
		//Recebendo data convertida
		pessoa.setNascimento(nascimento);
		
		//Obtendo Id
		pessoa.setId(dao.getChave());
		
		//Convertendo mascara do telefone
		pessoa.setFone(converteFone(pessoa.getFone()));
		
		pessoa.setDigest(geraHash(pessoa.getDigest()));
		
		
		
		//Cadastrando
		if(dao.insert(pessoa)){
			
			FacesContext context = FacesContext.getCurrentInstance();  
	        
	        context.addMessage(null, new FacesMessage("Pronto!", "Cadastro efetuado com sucesso!"));
			return("/index.jsf");
		}
		else
			return "";
		
	}//fim[salvar]
	
	// Metodo criado para retirar a mascara do campo Fone.
	private String converteFone(String fone){
		String novoFone = "";
		
		for(int i = 0; i < fone.length(); i++){
			try{
				novoFone = novoFone + Integer.parseInt(fone.charAt(i) + "");
			}
			catch(NumberFormatException e){
				
			}
		}
		
		return(novoFone);
		
	}//fim[converteFone]
	
	// Metodo utilizado para gerar o hash md5 e retornar a string de hexadecimais
	public String geraHash(String senha){
			try{
				
				MessageDigest algoritmo = MessageDigest.getInstance("MD5");
				// Guardando os elemententos da senha em um vetor de bytes
				byte messageDigest[] = algoritmo.digest(senha.getBytes("UTF-8"));
				
				// ???? 
				StringBuilder hexString = new StringBuilder();
				
				
				for (byte b : messageDigest) {
				  hexString.append(String.format("%02X", 0xFF & b));
				}
				
				return(hexString.toString());
				
			}
			catch(NoSuchAlgorithmException e){
				return"";
			}
			catch(UnsupportedEncodingException e){
				return"/index.jsf";
			}
			
	}//fim[geraHash]

	
	// GETTERS E SETTERS 
	
	public String getNovaData() {
		return novaData;
	}

	public void setNovaData(String novaData) {
		this.novaData = novaData;
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}
	
}//fim[PessoaBean]
